Общие сведения о том, как назначать различные действия дополнительным клавишам клавиатуры в [Xorg](/index.php/Xorg "Xorg")

## Contents

*   [1 Введение](#.D0.92.D0.B2.D0.B5.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5)
*   [2 Присваивание кодов клавиш символам](#.D0.9F.D1.80.D0.B8.D1.81.D0.B2.D0.B0.D0.B8.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BA.D0.BE.D0.B4.D0.BE.D0.B2_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D1.88_.D1.81.D0.B8.D0.BC.D0.B2.D0.BE.D0.BB.D0.B0.D0.BC)
    *   [2.1 Введение](#.D0.92.D0.B2.D0.B5.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5_2)
    *   [2.2 Шаг 1: создание файла для Xmodmap](#.D0.A8.D0.B0.D0.B3_1:_.D1.81.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D1.84.D0.B0.D0.B9.D0.BB.D0.B0_.D0.B4.D0.BB.D1.8F_Xmodmap)
    *   [2.3 Шаг 2: Тестирование](#.D0.A8.D0.B0.D0.B3_2:_.D0.A2.D0.B5.D1.81.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5)
    *   [2.4 Шаг 3: Постоянное использование](#.D0.A8.D0.B0.D0.B3_3:_.D0.9F.D0.BE.D1.81.D1.82.D0.BE.D1.8F.D0.BD.D0.BD.D0.BE.D0.B5_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5)
*   [3 Присваивание кодов клавиш действиям](#.D0.9F.D1.80.D0.B8.D1.81.D0.B2.D0.B0.D0.B8.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BA.D0.BE.D0.B4.D0.BE.D0.B2_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D1.88_.D0.B4.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F.D0.BC)
    *   [3.1 Использование xbindkeys](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_xbindkeys)
    *   [3.2 Использование actkbd](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_actkbd)
    *   [3.3 Использование инструментов окружения рабочего стола](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B8.D0.BD.D1.81.D1.82.D1.80.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.BE.D0.B2_.D0.BE.D0.BA.D1.80.D1.83.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F_.D1.80.D0.B0.D0.B1.D0.BE.D1.87.D0.B5.D0.B3.D0.BE_.D1.81.D1.82.D0.BE.D0.BB.D0.B0)
        *   [3.3.1 Gnome](#Gnome)
        *   [3.3.2 KDE](#KDE)
        *   [3.3.3 Xfce4](#Xfce4)
        *   [3.3.4 Openbox](#Openbox)
        *   [3.3.5 PekWM](#PekWM)

# Введение

Внутри графического окружения может появиться необходимость печати специального символа или выполнения определенной команды. Есть несколько способов реализации такой возможности, они и будут рассмотрены в этом HOWTO.

**Примечание:** Предполагается, что уже известны коды клавиш для требуемых комбинаций. Если коды не известны, то следует прочитать статью [Extra keyboard keys](/index.php/Extra_keyboard_keys_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Extra keyboard keys (Русский)"), где обьясняется, как их получить.

# Присваивание кодов клавиш символам

## Введение

В графическом режиме наиболее традиционным и правильным путем присваивания клавишам нужных кодов, является использование Xmodmap. Xmodmap, это эквивалент *loadkeys*: он использует файл с некоторыми директивами. Как и *loadkeys*, Xmodmap можно применить для изменения многих аспектов поведения вашей клавиатуры (например, модификаторов и т.д.), но эти аспекты выходят за рамки темы данной статьи. Единственный тип применения, который будет здесь рассмотрен, заключается в сопоставлении в соответствие X keycode и keysym. *xmodmap* входит в состав пакета *xorg-server-utils*.

```
# pacman -S xorg-server-utils

```

## Шаг 1: создание файла для Xmodmap

В этом файле, необходимо перечислить keycode директив, соблюдая следующий синтаксис:

```
keycode <Xkeycode> = <keysym>

```

Список keysyms для X можно найти в `/usr/include/X11/keysymdef.h`. В большинстве случаев они интуитивно понятны. Будем считать, что 239 это X keycode для моей горячей клавиши. Для присваивания ему литерала 'e', следует написать следующую директиву:

```
keycode 239 = e

```

Для получения на выходе символа американской валюты, следует написать следующую директиву::

```
keycode 239 = dollar

```

Этот способ также можно использовать для присваивания функций мультимедийным клавишам. Специальные функции можно найти в `/usr/include/X11/XF86keysym.h`.

Пример `~/.Xmodmap`:

```
keycode 160 = XF86AudioMute
keycode 176 = XF86AudioRaiseVolume
keycode 174 = XF86AudioLowerVolume

```

Такие мультимедиа программы как Rhythmbox и Exaile рассчитаны на работу с клавишами заданными в XF86 Symbols out-of-the-box, без необходимости настройки сторонними приложениями.

## Шаг 2: Тестирование

Для проверки запустить xmodmap с созданным файлом:

```
$ xmodmap ~/.Xmodmap

```

## Шаг 3: Постоянное использование

Очевидно, что это будет работать только для текущей сессии X, для постоянного применения используйте [xprofile](/index.php/Xprofile_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Xprofile (Русский)").

# Присваивание кодов клавиш действиям

## Использование xbindkeys

*[xbindkeys](/index.php/Xbindkeys "Xbindkeys")* (доступен в репозитории extra) позволяет назначать keycodes клавишам независимо от используемого окружения рабочего стола (Desktop Environment). В [AUR](/index.php/Arch_User_Repository_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Arch User Repository (Русский)") можно найти GUI-оболочку *xbindkeys_config*.

## Использование actkbd

Из [actkbd home page](http://users.softlab.ece.ntua.gr/~thkala/projects/actkbd/):

> **actkbd** (доступен [в AUR](https://aur.archlinux.org/packages.php?ID=8056)) это простой демон, который связывает определенные действия с сигналами с клавиатуры. Он получает комбинации клавиш и обрабатывает события при нажатии, повторе и отпускании. В настоящее время обеспечена поддержка только linux-2.6 evdev interface. Все необходимые привязки к комбинациям клавиш описываются в текстовом конфигурационном файле.

## Использование инструментов окружения рабочего стола

### Gnome

В Gnome Control Center есть все механизмы для управления доплнительными комбинациями клавиш. Фактически, он может обработать любой сканкод и сопоставить его любой клавише, которую видит ядро.

### KDE

Сочетания клавиш можно настроить в **Параметры системы** -> **Комбинации клавиш и росчерки**.

### Xfce4

Сочетания клавиш можно изменить в Настройках Клавиатуры (Keyboard Settings), которой для работы требуется `xfce4-keyboard-settings`.

### Openbox

Горячие клавиши и действия настраиваются в секции keyboard вашего файла `~/.config/openbox/rc.xml`. Пример, настройки мультимедийной клавиши уменьшения громкости:

```
<keybind key="XF86AudioLowerVolume">
<action name="Execute">
<execute>amixer set Master 5%- unmute</execute>
</action>
</keybind>

```

Для получения дополнительной информации, пожалуйста посетите [urukrama's Openbox Guide](http://urukrama.wordpress.com/openbox-guide/#Key_mouse) или [Openbox Wiki](http://openbox.org/wiki/Help:Actions).

### PekWM

Настройка клавиш в PekWM осуществляется путем редактирования файла `~/.pekwm/keys`. Например, добавление следующей строки в нижнюю часть секции Global, позволит уменьшать громкость с помощью мультимедийных клавиш:

```
KeyPress = "XF86AudioLowerVolume" { Actions = "exec amixer set Master 5- unmute &" }

```